<?php

namespace app\factory\tool;

use PHPMailer\PHPMailer\PHPMailer;
use think\facade\Log;

/**
 * ClassName:验证码发送工具
 * @author leijunxiang
 * @time 2024/12/23
 * @auditor
 */
class EmailSendTool
{
    const TOOL_EMAIL_SEND_TOOL = "EmailSendTool";
    ##想使用该工具，请先下载PHPMailer包： composer require phpmailer/phpmailer

    //qq邮箱授权码
//    private $authCode = "glcdlockwsxibdhj";//876710923
    private $authCode = "rhmxrhahzwvtdgdd";
    //发送人邮箱
    private $sendEmail = "3169422238@qq.com";

    /**
     * (true/false)开始发送(发送人,验证码)
     */
    public function startSend($toemail, $verifyCode)
    {
        if (empty($toemail) || empty($verifyCode)) {
            return false;
        }
        $flag = true;
        $mail = new PHPMailer();
        // 使用SMTP服务
        $mail->isSMTP();
        // 编码格式为utf8，不设置编码的话，中文会出现乱码
        $mail->CharSet = "utf8";
        // 发送人的SMTP服务器地址（QQ邮箱就是“smtp.qq.com”）
        $mail->Host = "smtp.qq.com";
        // 是否使用身份验证
        $mail->SMTPAuth = true;
        // 发送人的邮箱用户名，就是你自己的SMTP服务使用的邮箱
        $mail->Username = $this->sendEmail;
        // 发送方的邮箱密码，注意这里填写的是“客户端授权密码”而不是邮箱的登录密码！
        $mail->Password = $this->authCode;
        // 使用ssl协议方式
        $mail->SMTPSecure = "ssl";
        //ssl协议方式端口号是465
        $mail->Port = 465;
        $mail->isHTML();

        // 设置发件人信息，如邮件格式说明中的发件人，这里会显示为  Mailer(xxx@qq.com）
        $mail->setFrom($this->sendEmail);
        // 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@163.com)
        $mail->addAddress($toemail);
        // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
//        $mail->addReplyTo("1846869817@qq.com", "某某");

        //$mail->addCC("xxx@163.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
        //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
        //$mail->addAttachment("bug0.jpg");// 添加附件

        // 邮件标题
        $mail->Subject = "次元工坊";
        // 邮件正文
        $start = '<!DOCTYPE html><html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>邮箱验证码</title>
    <style>
        table {
            width: 700px;
            margin: 0 auto;
        }

        #top {
            width: 700px;
            border-bottom: 1px solid #ccc;
            margin: 0 auto 30px;
        }

        #top table {
            font: 12px Tahoma, Arial, 宋体;
            height: 40px;
        }

        #content {
            width: 680px;
            padding: 0 10px;
            margin: 0 auto;
        }

        #content_top {
            line-height: 1.5;
            font-size: 14px;
            margin-bottom: 25px;
            color: #4d4d4d;
        }

        #content_top strong {
            display: block;
            margin-bottom: 15px;
        }

        #content_top strong span {
            color: #f60;
            font-size: 16px;
        }

        #verificationCode {
            color: #f60;
            font-size: 24px;
        }

        #content_bottom {
            margin-bottom: 30px;
        }

        #content_bottom small {
            display: block;
            margin-bottom: 20px;
            font-size: 12px;
            color: #747474;
        }

        #bottom {
            width: 700px;
            margin: 0 auto;
        }

        #bottom div {
            padding: 10px 10px 0;
            border-top: 1px solid #ccc;
            color: #747474;
            margin-bottom: 20px;
            line-height: 1.3em;
            font-size: 12px;
        }

        #content_top strong span {
            font-size: 18px;
            color: #FE4F70;
        }

        #sign {
            text-align: right;
            font-size: 18px;
            color: #FE4F70;
            font-weight: bold;
        }

        #verificationCode {
            height: 100px;
            width: 680px;
            text-align: center;
            margin: 30px 0;
        }

        #verificationCode div {
            height: 100px;
            width: 680px;

        }

        .button {
            color: #FE4F70;
            margin-left: 10px;
            height: 80px;
            width: 80px;
            resize: none;
            font-size: 42px;
            border: none;
            outline: none;
            padding: 10px 15px;
            background: #ededed;
            text-align: center;
            border-radius: 17px;
            box-shadow: 6px 6px 12px #cccccc,
            -6px -6px 12px #ffffff;
        }

        .button:hover {
            box-shadow: inset 6px 6px 4px #d1d1d1,
            inset -6px -6px 4px #ffffff;
        }

    </style>
</head>
<body>
<table>
    <tbody>
    <tr>
        <td>
            <div id="top">
                <table>
                    <tbody><tr><td></td></tr></tbody>
                </table>
            </div>

            <div id="content">
                <div id="content_top">
                    <strong>尊敬的用户：您好！</strong>
                    <strong>
                        您正在进行<span>注册账号</span>操作，请在验证码中输入以下验证码完成操作：
                    </strong>
                    <div id="verificationCode">';
        $verifyCode = strval($verifyCode);
        for ($i = 0; $i < strlen($verifyCode); $i++) {
            $char = $verifyCode[$i];
            // <button class="button" >4</button>
            $value = ' <button class="button" >' . $char . '</button>';
            $start .= $value;
        }
        $last = '</div>
                </div>
                <div id="content_bottom">
                    <small>
                        注意：此操作可能会修改您的密码、登录邮箱或绑定手机。如非本人操作，请及时登录并修改密码以保证帐户安全
                        <br>（工作人员不会向你索取此验证码，请勿泄漏！)
                    </small>
                </div>
            </div>
            <div id="bottom">
                <div>
                    <p>此为系统邮件，请勿回复<br>
                        请保管好您的邮箱，避免账号被他人盗用
                    </p>
                    <p id="sign">次元工坊</p>
                </div>
            </div>
        </td>
    </tr>
    </tbody>
</table>
</body>';
        $mail->Body = $start . $last;
        //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用
        if (!$mail->send()) {
            // 发送邮件
//            echo "Message could not be sent.";
//            echo "Mailer Error: " . $mail->ErrorInfo;// 输出错误信息
            $flag = false;
            Log::error($mail->ErrorInfo);
        }
        return $flag;
    }


}